package com.kaihui.module_web.jsinterface

import android.app.Activity
import android.content.Context
import com.just.agentweb.AgentWeb
import com.kaihui.lib_base.utils.ToastUtil

class AgentWebBackHelper(private val agentWeb: AgentWeb) {

    companion object {
        private const val BACK_PRESS_INTERVAL = 2000L // 2秒内连续点击
    }

    private var backPressTime: Long = 0

    /**
     * 判断是否可以返回
     */
    fun canGoBack(): Boolean {
        return try {
            agentWeb.webCreator.webView.canGoBack()
        } catch (e: Exception) {
            e.printStackTrace()
            false
        }
    }

    /**
     * 获取历史记录数量
     */
    fun getBackHistoryCount(): Int {
        return try {
            agentWeb.webCreator.webView.copyBackForwardList().size
        } catch (e: Exception) {
            e.printStackTrace()
            0
        }
    }

    /**
     * 获取当前历史记录位置
     */
    fun getCurrentHistoryIndex(): Int {
        return try {
            agentWeb.webCreator.webView.copyBackForwardList().currentIndex
        } catch (e: Exception) {
            e.printStackTrace()
            0
        }
    }

    /**
     * 判断是否在首页（没有历史记录可返回）
     */
    fun isAtHomePage(): Boolean {
        return getCurrentHistoryIndex() <= 1
    }

    /**
     * 执行返回操作
     */
    fun goBack(): Boolean {
        return if (canGoBack()) {
            agentWeb.webCreator.webView.goBack()
            true
        } else {
            false
        }
    }

    /**
     * 处理返回键逻辑（带双击退出）
     */
    fun handleBackPress(context: Context): Boolean {
        return if (canGoBack()) {
            // 可以返回，执行返回操作
            goBack()
            true
        } else {
            // 不能返回，检查是否双击退出
            checkDoubleClickExit(context)
        }
    }

    /**
     * 双击退出应用
     */
    private fun checkDoubleClickExit(context: Context): Boolean {
        val currentTime = System.currentTimeMillis()
        return if (currentTime - backPressTime > BACK_PRESS_INTERVAL) {
            // 第一次点击
            ToastUtil.showShort(context,"再按一次退出应用")
            backPressTime = currentTime
            true // 消耗掉这次返回键事件
        } else {
            // 第二次点击，退出应用
            (context as? Activity)?.finish()
            false
        }
    }

    /**
     * 返回到指定步骤
     */
    fun goBack(steps: Int): Boolean {
        return try {
            val webView = agentWeb.webCreator.webView
            val history = webView.copyBackForwardList()
            val currentIndex = history.currentIndex

            if (currentIndex - steps >= 0) {
                val targetItem = history.getItemAtIndex(currentIndex - steps)
                webView.loadUrl(targetItem.url)
                true
            } else {
                false
            }
        } catch (e: Exception) {
            e.printStackTrace()
            false
        }
    }

    /**
     * 清除返回历史记录
     */
    fun clearBackHistory() {
        try {
            agentWeb.webCreator.webView.clearHistory()
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }
}